home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / C / LIB / YLIB / ylib_0_10 / s / ylib_mod < prev    next >
Text File  |  1993-09-21  |  7KB  |  356 lines

  1. ;
  2. ;    Copyright (C) 1993  Claus Vohwinkel
  3. ;
  4. ;    This program is free software; you can redistribute it and/or modify
  5. ;    it under the terms of the GNU General Public License as published by
  6. ;    the Free Software Foundation; either version 2 of the License , or
  7. ;    (at your option) any later version.
  8. ;
  9. ;    This program is distributed in the hope that it will be useful,
  10. ;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. ;    GNU General Public License for more details.
  13. ;
  14. ;    You should have received a copy of the GNU General Public License
  15. ;    along with this program; see the file COPYING.  If not, write to
  16. ;    the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  17. ;
  18. ;    You may contact the author by:
  19. ;       e-mail:  vohwinkel@vxdesy.desy.de
  20. ;      us-mail:  Claus Vohwinkel
  21. ;                SCRI/FSU
  22. ;                400 Science Library
  23. ;                Tallahassee, FL 32306
  24. ;      
  25. ;
  26.  
  27. R0 RN 0
  28. R1 RN 1
  29. R2 RN 2
  30. R3 RN 3
  31. R4 RN 4
  32. R5 RN 5
  33. R6 RN 6
  34. R7 RN 7
  35. R8 RN 8
  36. R9 RN 9
  37. R10 RN 10
  38. R11 RN 11
  39. IP RN 12
  40. SP RN 13
  41. R14 RN 14
  42. PC RN 15
  43.  
  44. F0 FN 0
  45. F1 FN 1
  46. F2 FN 2
  47. F3 FN 3
  48.  
  49. OVERFLOW * &10000000
  50. BASE_ID * &80680
  51. ;BASE_ID * &C0340   ; FOR TEST ONLY
  52.  
  53.  
  54. XOS_WRITEI * &20100
  55. XOS_WRITE0 *  &20002
  56. XOS_NEWLINE * &20003
  57. XOS_READARGS * &20049
  58. XOS_MODULE *  &2001E
  59.  
  60.  
  61.         ORG &8000
  62.  
  63. MODHEAD & 0
  64.         & MODINIT - MODHEAD
  65.         & MODFIN - MODHEAD
  66.         & 0
  67.         & MODTITLE - MODHEAD
  68.         & MODHELP - MODHEAD
  69.         & MODCOM - MODHEAD
  70.         & BASE_ID
  71.         & SWICODE - MODHEAD
  72.         & SWIDECODE - MODHEAD
  73.         & -1
  74. MODTITLE = "FastMath",0
  75.         ALIGN
  76. MODHELP = "FastMath",9,"0.10 (20 Sep 1993)",0
  77.         ALIGN
  78.  
  79. MODCOM = "FastMath",0
  80.         ALIGN
  81.         & FMC - MODHEAD
  82.         & &00020000
  83.         & SYNTAX - MODHEAD
  84.         & SHELP - MODHEAD
  85.         & 0
  86. SHELP = "FastMath [-on|-off] [-verbose] determines wheter the usual CLib",&D
  87.       = "routines or the faster routines are used. If -verbose is specified",&D
  88.       = "a message will be printed when a program is linked with the faster",&D
  89.       = "routines. This is for debugging only and should not be used when",&D
  90.       = "starting up Wimp applications.",&D,0
  91.         ALIGN
  92.  
  93. SWIDECODE = "SharedCLibrary",0
  94.           = "LibInitAPCS_A",0
  95.           = "LibInitAPCS_R",0
  96.           ALIGN
  97.           & 0
  98.  
  99.  ^ 0,IP
  100. R7S    # 4      ; R7S - SPS MUST BE FIRST
  101. R8S    # 4
  102. R9S    # 4
  103. SPS    # 4
  104. ACTIVE # 4
  105. CLSWI  # 4
  106. CLBASE # 4
  107. CLPRIV # 4
  108. VERB   # 4
  109. OFF    # 4
  110. TRSTR  # 24
  111. BASEEND # 0
  112.  
  113. MODFIN LDR IP,[IP]
  114.        LDR R1,ACTIVE
  115.        TEQ R1,#0
  116.        MOVEQ PC,R14
  117.        ADR R0,ERROR1BLOCK
  118.        TEQP PC,#&10000003
  119.        MOV PC,R14
  120.  
  121. MODINIT STMFD SP!,{R14}
  122.         RFS R0
  123.         AND R0,R0,#&FF000000
  124.         TEQ R0,#&81000000
  125.         BNE MODIE3
  126.         TEQ R11,#0
  127.         BNE MODIE    ; new instantation not allowed
  128.         LDR R2,[IP]
  129.         TEQ R2,#0
  130.         BNE MODI1     ; WE HAVE ALREADY WORKSPACE
  131.         MOV R0,#6
  132.         MOV R3,#BASEEND - R7S
  133.         SWI XOS_MODULE
  134.         BVS MODIE1      
  135.         STR R2,[IP]
  136. MODI1   MOV IP,R2
  137.         MOV R0,#0
  138.         STR R0,ACTIVE
  139.         STR R0,OFF
  140.         STR R0,VERB
  141.         LDMFD SP!,{PC}
  142.  
  143. MODIE   TEQP PC,#&10000003
  144. MODIE1  ADR R0,ERRORBLOCK
  145.         LDMFD SP!,{PC}
  146.  
  147. MODIE3 ADR R0,ERX5T
  148.  LDMFD SP!,{R14}
  149.  ORRS PC,R14,#OVERFLOW
  150. ERX5T & BASE_ID+63
  151.       = "You don't have an FPA10",0
  152.       ALIGN
  153.  
  154. FMC STMFD SP!,{R14}
  155.     LDR IP,[IP]
  156.     TEQ R1,#0
  157.     BEQ FMC5
  158.     MOV R1,R0
  159.     ADR R0,PARSE
  160.     ADR R2,TRSTR
  161.     MOV R3,#BASEEND - TRSTR
  162.     SWI XOS_READARGS
  163.     BVS FMCE
  164.     LDR R0,[R2]
  165.     LDR R1,[R2,#4]
  166.     TEQ R1,#0
  167.     MOVNE R1,#-1
  168.     TST R0,R1
  169.     BNE FMCE
  170.     TEQ R1,#0
  171.     STRNE R1,OFF
  172.     TEQ R0,#0
  173.     STRNE R1,OFF
  174.     ORR R0,R0,R1
  175.     LDR R1,[R2,#8]
  176.     STR R1,VERB
  177.     ORRS R0,R0,R1
  178.     LDMNEFD SP!,{PC}^
  179.  
  180.  
  181. FMC5 ADR R0,ST01
  182.     SWI XOS_WRITE0
  183.     LDR R0,OFF
  184.     TEQ R0,#0
  185.     ADRNE R0,SOFF
  186.     ADREQ R0,SON
  187.     SWI XOS_WRITE0
  188.     LDR R0,VERB
  189.     TEQ R0,#0
  190.     ADRNE R0,ST02
  191.     SWINE XOS_WRITE0
  192.     SWI XOS_WRITEI + "."
  193.     SWI XOS_NEWLINE
  194.     LDMFD SP!,{PC}^
  195.  
  196.  
  197. FMCE ADR R0,SYNBL
  198. FMCE1 LDMFD SP!,{R14}
  199.      ORRS PC,R14,#OVERFLOW
  200.  
  201. ST01    = " FastMath is ",0
  202. ST02    = " and in verbose mode",0
  203.  
  204. SYNBL & BASE_ID+63
  205. SYNTAX = "Syntax : FastMath [-on|-off] [-verbose]",0
  206.         ALIGN
  207.  
  208. PARSE = "on/s,off/s,verbose/s",0
  209.       ALIGN
  210. SOFF = "off",0
  211. SON  = "on",0
  212.      ALIGN
  213.  
  214.  
  215. SWICODE LDR IP,[IP]
  216.  
  217.         STMFD SP!,{R0-R5,R14}
  218.         MOV R0,#18
  219.         ADR R1,CLTITLE
  220.         SWI XOS_MODULE
  221.         BVS SWEX
  222.         STR R3,CLBASE
  223.         STR R4,CLPRIV
  224.         LDR R2,[R3,#32]
  225.         ADD R2,R2,R3
  226.         STR R2,CLSWI
  227.         LDMFD SP!,{R0-R5,R14}
  228.  
  229.         LDR R10,OFF
  230.         TEQ R10,#0
  231.         LDR R10,CLSWI
  232.         TEQEQ R11,#1        ; R BINDING ?
  233.         ADRNE IP,CLPRIV  
  234.         MOVNE PC,R10      ; NO -> DON'T ALTER
  235.         
  236.         STMIA IP,{R7-R9}
  237.         MOV R7,R0
  238.         MOV R8,#0
  239. SWIC1   LDR R9,[R7],#20
  240.         CMP R9,#-1
  241.         BEQ SWIC2
  242.         TEQ R9,#1
  243.         TEQEQ R8,#0
  244.         MOVEQ R8,#1
  245.         TEQ R9,#2
  246.         TEQEQ R8,#1
  247.         MOVEQ R8,#2
  248.         STREQ R7,SPS
  249.         B SWIC1
  250. SWIC2   TEQ R8,#2
  251.         LDMNEIA IP,{R7-R9}    
  252.         ADRNE IP,CLPRIV  
  253.         MOVNE PC,R10
  254.         LDR R7,SPS
  255.         LDR R8,[R7,#-16]
  256.         LDR R9,[R7,#-12]
  257.         SUB R7,R9,R8
  258.         CMP R7,#732
  259.         LDMLTIA IP,{R7-R9}    
  260.         ADRLT IP,CLPRIV
  261.         MOVLT PC,R10
  262.         STR R14,SPS
  263.         ADR R7,SWIC3
  264.         AND R14,R14,#&FC000000
  265.         ORR R14,R14,#3
  266.         ORR R14,R14,R7     ; set return adress and caller flags
  267.         MOV R7,IP         ; save my own private word
  268.         ADR IP,CLPRIV
  269.         MOV PC,R10
  270.  
  271. SWIC3   MOV IP,R7         ; restore private word
  272.         BVS SWICV          ; did we get an error ?
  273.  
  274.         ADD R7,R8,#528     ; vector for acos
  275.         ADR R8,BRTAB
  276.         SUB R10,R8,R7
  277.         MOV R10,R10,LSR #2
  278. SWIC4   LDR R9,[R8]
  279.         CMP R9,#-1
  280.         BEQ SWIC6
  281.         TEQ R9,#0
  282.         BEQ SWIC5
  283.         ADD R9,R9,R10
  284.         BIC R9,R9,#&FF000000
  285.         ORR R9,R9,#&EA000000
  286.         STR R9,[R7]
  287. SWIC5   ADD R7,R7,#4
  288.         ADD R8,R8,#4
  289.         B SWIC4
  290.         
  291. SWIC6   MOV R7,#1
  292.         STR R7,ACTIVE
  293.         LDR R7,VERB
  294.         TEQ R7,#0
  295.         BEQ SWIC7
  296.         MOV R7,R0
  297.         ADR R0,ST03
  298.         SWI XOS_WRITE0
  299.         MOV R0,R7
  300.         SWI XOS_NEWLINE
  301. SWIC7   LDMIA IP,{R7-R9,R14}
  302.         MOVS PC,R14       
  303.  
  304. SWICV   LDMIA IP,{R7-R9,R14}
  305.         ORRS PC,R14,#OVERFLOW
  306.  
  307. SWEX  ADR R0,ERROR2BLOCK
  308.       LDMFD SP!,{R0-R5,R14}
  309.       ORRS PC,R14,#OVERFLOW
  310.  
  311.  
  312.  
  313. ST03    = " FastMath is linked into current application",&D,0
  314.         ALIGN
  315. CLTITLE = "SharedCLibrary",0
  316.         ALIGN
  317.  
  318. ERRORBLOCK & BASE_ID+63
  319.         = " error during module initialisation",0
  320.         ALIGN
  321. ERROR2BLOCK & BASE_ID+63
  322.         = " could not find Shared CLibrary",0
  323.         ALIGN
  324. ERROR1BLOCK & BASE_ID+63
  325.         = " module is linked to applications",0
  326.         ALIGN
  327.  
  328. ; -1 is end of table
  329. ; 0 means don't overwrite SharedCLib vector
  330. BRTAB B yacos
  331.  B yasin
  332.  B yatan
  333.  B yatan2
  334.  B ycos
  335.  B ysin
  336.  B ytan
  337.  B ycosh
  338.  B ysinh
  339.  B ytanh
  340.  B yexp
  341.  & 0       ; frexp
  342.  & 0       ; ldexp
  343.  B ylog
  344.  B ylog10
  345.  B ymodf
  346.  B ypow
  347.  B ysqrt
  348.  B yceil
  349.  & 0 ;    fabs
  350.  B yfloor
  351.  B yfmod
  352.  & -1
  353.  
  354.  GET YLIB
  355.  END
  356.